package com.catchu.pattern.creational.模板方法模式;

/**
 * 模板方法基类
 */
public abstract class BaseTemplate {

    /**
     * 基础方法
     */
    protected abstract void method1();

    protected abstract void method2();

    /**
     * 钩子方法，子类可以通过钩子方法约束父类的行为
     * @return
     */
    protected abstract boolean hookMethod();

    /**
     * 模板方法，为防止篡改，使用final修饰
     */
    protected final void templateMethod(){
        method1();
        if(hookMethod()){
            method2();
        }
    }
}
